#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::set;

// 函数模板，可以使int, double 或者 set<int>
template <class T>
T add(T a, T b){
    cout << a + b << "\n";
    return a + b;
}

// 特例化处理set的“相加”（实际是合并）
template <class T = set<int>>
set<int> add(set<int> a, set<int> b){
    a.insert(b.begin(), b.end());
    auto it = a.begin();
    while(it != a.end()){
        cout << *it << " ";
        it++;
    }
    return a;
}

void test(){
    add(3, 5);
    add(2.5, 3.7);
    set<int> set_a = {1, 2};
    set<int> set_b = {2, 3};
    add(set_a, set_b);
}

int main()
{
    test();
    return 0;
}

